﻿using Microsoft.VisualStudio.TestTools.UnitTesting;
using Web7.Core.Security;
using Web7.Domain;

namespace Web7.Tests.Container.Permission
{
    class AssistTest : Entity
    {
        public string Name { get; set; }

        public int Age { get; set; }

        public int Sex { get; set; }
    }

    /// <summary>
    /// ExpressionResolveTest 的摘要说明
    /// </summary>
    [TestClass]
    public class ExpressionResolveTest
    {
        private TestContext testContextInstance;

        public IExpressionResolve ExpressionResolveService;

        public ExpressionContext Context;

        private readonly string expressionStr_1 = "Name=abc and Sex=0 or Age>10";
        private readonly string expressionStr_2 = "Name=test";

        [TestInitialize]
        public void Initialize()
        {
            Context = new ExpressionContext() { Content = new AssistTest() { Name = "test", Age = 20, Sex = 1 } };
        }

        #region 附加测试特性
        //
        // 编写测试时，可以使用以下附加特性:
        //
        // 在运行类中的第一个测试之前使用 ClassInitialize 运行代码
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // 在类中的所有测试都已运行之后使用 ClassCleanup 运行代码
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // 在运行每个测试之前，使用 TestInitialize 来运行代码
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // 在每个测试运行完之后，使用 TestCleanup 来运行代码
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void ExpressionResolver()
        {
            ExpressionResolveService = new ExpressionResolverService(expressionStr_1);
            ExpressionResolveService.ExpressionContent = Context;

            var expect = ExpressionResolveService.ExecuteExpression();
            var actual = true;

            Assert.AreEqual(expect, actual);
        }
    }
}
